package com.vf.admin.utils;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 生成订单号工具类
 * @author anxiang.li
 * @date 2018/11/05
 */
public class GenerateOrderNum {

    /**全局自增数*/
    private static int count = 0;
    /**每毫秒秒最多生成多少订单（最好是像9999这种准备进位的值）*/
    private static final int total = 9999;
    /** 记录上一次的时间，用来判断是否需要递增全局数*/
    private static String now = null;
    /**格式化的时间字符串*/
    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
    /**使用单例模式，不允许直接创建实例*/
    private GenerateOrderNum(){}

    /**创建一个空实例对象，类需要用的时候才赋值*/
    private static GenerateOrderNum generateOrderNum = null;

    /**
     * 单例模式--懒汉模式
     * @return GenerateOrderNum
     */
    public static synchronized GenerateOrderNum getInstance(){
        if(generateOrderNum==null){
            generateOrderNum = new GenerateOrderNum();
        }
        return generateOrderNum;
    }

    /**
     * 获取当前时间年月日时分秒毫秒字符串
     * @return  String
     */
    private static String getNowDateStr() {
        return sdf.format(new Date());
    }

    /**
     * 生成一个订单号
     * @return 订单号
     */
    public synchronized String generateOrderNo() {
         String dataStr = getNowDateStr();
         if (dataStr.equals(now)) {
             count++;//自增
         } else {
             count = 1; now = dataStr;
         }
         int countInteger = String.valueOf(total).length() - String.valueOf(count).length();
         //算补位
         String bu = "";
        // 补字符串
         for (int i = 0; i < countInteger; i++) {
             bu += "0";
         }
         bu += String.valueOf(count);
         if (count >= total) {
             count = 0;
         }
         return dataStr + bu;
     }
 }
